pywinauto 包使用
pywinauto 是什么?
pywinauto 是一个自动化图形用户界面 (GUI) 的库,主要用于Windows应用程序。在 pywinauto
中,Desktop
和 Application
是两个核心类,它们各自有不同的用途和使用场景。
backend 选择
我们安装好 Pywinauto 之后,首先要确定哪种可访问性技术(backend)可以用于我们的应用程序,在 windows 上受支持的有两种:
- Win32 API
(backend= "win32")
默认的 backend 主要支持 MFC、VB6、VCL、简单的 WinForms 控件和大多数旧的遗留应用程序 - MS UI Automation
(backend="uia")
支持 WinForms、WPF、商店应用程序、QT5、浏览器
常用的一些元素定位工具:
- SPY++:用于 WIN32 API,当 SPY++ 可以显示所有的控件时,访问技术应该选择 "win32"。
- Inspect.exe:如果
Inspect.exe
的模式设置为 UIA 模式,可以比 SPY++ 显示更多的控件,则访问技术应该选择"uia"。 - py_inspect:支持 win32 和 uia 两种访问技术,是SWAPY的替代。
- UISPY:支持 uia 访问技术。
- SWAPY:只支持win32访问技术。
Desktop 类
Desktop
类代表整个桌面,允许你访问和操作桌面上的所有窗口,包括非特定应用程序的窗口。Desktop
类非常适合于需要对多个应用程序或系统级窗口进行操作的场景。
使用 Desktop
类的常见场景包括:
- 查找和操作桌面上的窗口,不限于特定应用程序。
- 执行跨多个应用程序的自动化任务。
- 获取当前活动窗口或桌面上的所有窗口列表。
示例:获取桌面上所有窗口的标题
from pywinauto import Desktop
desktop = Desktop(backend="uia")
windows = desktop.windows()
# 打印所有窗口的标题
for w in windows:
print(w.window_text())
Application 类
Application
类用于启动和控制一个特定的应用程序。你可以使用 Application
类来启动一个新的应用程序实例,或者连接到一个已经运行的应用程序。一旦连接到应用程序,你可以通过 Application
对象来操作应用程序窗口和控件,执行各种自动化任务。
使用 Application
类的常见场景包括:
- 启动一个新的应用程序实例。
- 连接到一个已经运行的应用程序。
- 操作应用程序的窗口和控件,如按钮点击、文本输入、菜单选择等。
示例:启动和控制记事本应用程序
from pywinauto import Application
# 启动记事本应用程序
app = Application(backend="uia").start("notepad.exe")
# 通过窗口标题选择主窗口
main_window = app.window(title='无标题 - 记事本')
# 在记事本中输入文本
main_window.Edit.type_keys("Hello, pywinauto!", with_spaces=True)